}
}
export module WebSQLStorage {
export function detect(uniqueKey: string, callback: (error: Error, storage: AttachedStorage) => void, windowOverride = window) {
var _openDatabase: typeof openDatabase = (<any>windowOverride).openDatabase;
if (!_openDatabase) {
callback(new Error('Browser does not expose openDatabase.'), null);
return;}
var mangler = new NameMangler();
var dbName = mangler.mangleDatabaseObjectName(uniqueKey) || 'teapo';
var db: Database;
try {db = _openDatabase(dbName, 1, 'Teapo filesystem database.', 1024*1024);
}
catch (openDatabaseError) {
callback(openDatabaseError, null);
return;}
var storage = new WebSQLStorage(db);
callback(null, storage);
}
export class NameMangler {
private static _safeCharacters = '1234567890abcdefghijklmnopqrst_()/';
private _cache: { [name: string]: string; } = {};
constructor() {}
mangleDatabaseObjectName(name: string): string {
return name;
}
unmangleDatabaseObjectName(name: string): string {
return name;
}
}
export function wrapSQLError(sqlError: SQLError): Error {
return new Error(sqlError.message + ' [' + sqlError.code + ']');
}
}
}